/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Clases;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
import Persistencia.PersistenciaFactura;

/**
 *
 * @author JAVA
 */
public class Envio {

    private String host;
    private String from;
    private String to;
    private String msg;
    private String rutaArchivo;
    private String nombre;

    public Envio(String host, String from, String to, String msg, String rutaArchivo, String nombre) {
        this.from = from;
        this.host = host;
        this.to = to;
        this.msg = msg;
        this.rutaArchivo = rutaArchivo;
        this.nombre = nombre;
    }

    public int Send() {

        int insertado = 4;
        Properties prop = new Properties();

        prop.put("mail.smtp.host", this.host);
        
        
        /*Esta línea es la que indica al API que debe autenticarse*/
        //prop.put("mail.smtp.auth", "false");


        /*Añadir esta linea si queremos ver una salida detallada del programa*/
        //prop.put("mail.debug", "true");

        try {

            SMTPAuthentication auth = new SMTPAuthentication();
            //Session session = Session.getDefaultInstance(prop);
            Session session = Session.getInstance(prop, null);
            Message mensaje = getMessage(session, from, to, rutaArchivo);

            Transport.send(mensaje);
            insertado = PersistenciaFactura.correoFactura(this.nombre);
            if (insertado != 0){
                insertado= 3;}
                else {
                insertado = 4;
            }
                
        } catch (Exception e) {

            ExceptionManager.ManageException(e);
        }
        return insertado;
    }

    private MimeMessage getMessage(Session session, String from, String to, String rutaArchivo) {

        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(this.nombre);
            
         
            
            BodyPart texto = new MimeBodyPart();
            texto.setText(this.msg);

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(texto);

            BodyPart adjunto = new MimeBodyPart();
            DataSource source = new FileDataSource(rutaArchivo);
            adjunto.setDataHandler(new DataHandler(source));
            adjunto.setFileName(this.nombre);
            
            multipart.addBodyPart(adjunto);
           
            message.setContent(multipart);
            
            return (MimeMessage) message;

        } catch (MessagingException ex) {

            ExceptionManager.ManageException(ex);
            return null;

        } catch (Exception ex) {

            ExceptionManager.ManageException(ex);
            return null;
        }
    }
}

class SMTPAuthentication extends javax.mail.Authenticator {

    @Override
    public PasswordAuthentication getPasswordAuthentication() {

        String username = "";

        String password = "";

        return new PasswordAuthentication(username, password);

    }
}

class ExceptionManager {

    public static void ManageException(Exception e) {

        System.out.println("Se ha producido una exception");

        System.out.println(e.getMessage());

        e.printStackTrace(System.out);

    }
}